home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 41 / Amiga Format CD41 (1999-06)(Future Publishing)(GB)[!][issue 1999-07].iso / -seriously_amiga- / programming / other / scm / slib / values.scm < prev    next >
Text File  |  1999-04-19  |  719b  |  28 lines

  1. ;"values.scm" multiple values
  2. ;By david carlton, carlton@husc.harvard.edu.
  3. ;
  4. ;This code is in the public domain.
  5.  
  6. (require 'record)
  7.  
  8. (define values:*values-rtd*
  9.   (make-record-type "values"
  10.             '(values)))
  11.  
  12. (define values
  13.   (let ((make-values (record-constructor values:*values-rtd*)))
  14.     (lambda x
  15.       (if (and (not (null? x))
  16.            (null? (cdr x)))
  17.       (car x)
  18.       (make-values x)))))
  19.  
  20. (define call-with-values
  21.   (let ((access-values (record-accessor values:*values-rtd* 'values))
  22.     (values-predicate? (record-predicate values:*values-rtd*)))
  23.     (lambda (producer consumer)
  24.       (let ((result (producer)))
  25.     (if (values-predicate? result)
  26.         (apply consumer (access-values result))
  27.         (consumer result))))))
  28.